package ar.uba.fi.algo3.control;

import java.awt.Font;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.JLabel;

import ar.uba.fi.algo3.modelo.BatallaNaval;
import ar.uba.fi.algo3.modelo.nave.Nave;
import ar.uba.fi.algo3.modelo.nave.NaveBuque;
import ar.uba.fi.algo3.modelo.nave.NaveDestructor;
import ar.uba.fi.algo3.modelo.nave.NaveLancha;
import ar.uba.fi.algo3.modelo.nave.NavePortaAviones;
import ar.uba.fi.algo3.modelo.nave.NaveRompeHielos;
import ar.uba.fi.algo3.vista.VistaNave;

import fiuba.algo3.titiritero.modelo.GameLoop;
import fiuba.algo3.titiritero.modelo.ObservadorDeGameLoop;

public class ControladorNaves implements ObservadorDeGameLoop{
  
	GameLoop gameLoop;
	protected ArrayList<VistaNave> vistaNaves;
	BatallaNaval juego;
	public JLabel textNaves,textNaveBuque,textNaveLancha1,textNaveLancha2,textNavePortaAviones,textNaveDestructor1,textNaveDestructor2,textNaveRompehielos;
	NaveLancha naveLancha;
	private ArrayList<Nave> listaNaves;
	
	public ControladorNaves (GameLoop unGameLoop, ArrayList<VistaNave> vistasNaves, BatallaNaval juego) {
                
		this.juego= juego;
		this.gameLoop = unGameLoop;        
		this.listaNaves= this.juego.getListaNaves();
		this.vistaNaves = vistasNaves;
		this.textNaves= new JLabel ("Naves");
		this.textNaveBuque= new JLabel ("Buque: ");
		this.textNaveLancha1= new JLabel ("Lancha 1: ");
		this.textNaveLancha2= new JLabel ("Lancha 2: ");
		this.textNaveDestructor1= new JLabel ("Destructor 1: ");
		this.textNaveDestructor2= new JLabel ("Destructor 2: ");
		this.textNavePortaAviones= new JLabel ("Portaaviones: ");
		this.textNaveRompehielos= new JLabel ("Rompehielos: ");
	}

	 @Override
	 public void notificarCicloFinalizado() {
		
		 boxNaves();
		 
		 Iterator<VistaNave> iteradorDeVistaNaves = vistaNaves.iterator();
		 while (iteradorDeVistaNaves.hasNext()) {	        
			VistaNave vistaNave = iteradorDeVistaNaves.next();
			boxNaveLancha1(this.listaNaves.get(0));
			boxNaveLancha2(this.listaNaves.get(1));
			boxNaveBuque(this.listaNaves.get(2));
			boxNaveDestructor1(this.listaNaves.get(3));
			boxNaveDestructor2(this.listaNaves.get(4));
			boxNaveRompehielos(this.listaNaves.get(5));
			boxNavePortaAviones(this.listaNaves.get(6));
			if (vistaNave.getNave().numeroDeComponentesSanos==0) {
				
				gameLoop.remover(vistaNave);
				gameLoop.remover(vistaNave.getPosicionable());
				iteradorDeVistaNaves.remove();
			}
		 }
	}

	private void boxNaveBuque(Nave nave) {
		
		if (nave.getClass()== NaveBuque.class){
			textNaveBuque.setFont(new Font("", Font.BOLD, 15));
			textNaveBuque.setBounds(500, 280, 250, 20);
			textNaveBuque.setVisible(true);
			textNaveBuque.setText("Buque: " + (nave.cantidadComponentesNave())+ "/"+ nave.obtenerNumeroDeComponentes());
		}
	}

	private void boxNaveLancha1(Nave nave) {
		
		if (nave.getClass()== NaveLancha.class){
			textNaveLancha1.setFont(new Font("", Font.BOLD, 15));
			textNaveLancha1.setBounds(500, 260, 250, 20);
			textNaveLancha1.setVisible(true);
			textNaveLancha1.setText("Lancha 1: " + (nave.cantidadComponentesNave()+ "/"+ nave.obtenerNumeroDeComponentes()));
		}
	}
	
	private void boxNaveLancha2(Nave nave) {
		
		if (nave.getClass()== NaveLancha.class){
			textNaveLancha2.setFont(new Font("", Font.BOLD, 15));
			textNaveLancha2.setBounds(500, 360, 250, 20);
			textNaveLancha2.setVisible(true);
			textNaveLancha2.setText("Lancha 2: " + (nave.cantidadComponentesNave()+ "/"+ nave.obtenerNumeroDeComponentes()));
		}
	}
	
	private void boxNaveDestructor1(Nave nave) {
		
		if (nave.getClass()== NaveDestructor.class){
			textNaveDestructor1.setFont(new Font("", Font.BOLD, 15));
			textNaveDestructor1.setBounds(500, 300, 250, 20);
			textNaveDestructor1.setVisible(true);
			textNaveDestructor1.setText("Destructor 1: " + (nave.cantidadComponentesNave()+ "/"+ nave.obtenerNumeroDeComponentes()));
		}
	}
	
	private void boxNaveDestructor2(Nave nave) {
		
		if (nave.getClass()== NaveDestructor.class){
			textNaveDestructor2.setFont(new Font("", Font.BOLD, 15));
			textNaveDestructor2.setBounds(500,380 , 250, 20);
			textNaveDestructor2.setVisible(true);
			textNaveDestructor2.setText("Destructor 2: " + (nave.cantidadComponentesNave()+ "/"+ nave.obtenerNumeroDeComponentes()));
		}
	}
	
	private void boxNaveRompehielos(Nave nave) {
		
		if (nave.getClass()== NaveRompeHielos.class){
			textNaveRompehielos.setFont(new Font("", Font.BOLD, 15));
			textNaveRompehielos.setBounds(500, 320, 250, 20);
			textNaveRompehielos.setVisible(true);
			textNaveRompehielos.setText("RompeHielos: " + (nave.cantidadComponentesNave()+ "/"+ nave.obtenerNumeroDeComponentes()));
		}
	}

	private void boxNavePortaAviones(Nave nave) {
		
		if (nave.getClass()== NavePortaAviones.class){
			textNavePortaAviones.setFont(new Font("", Font.BOLD, 15));
			textNavePortaAviones.setBounds(500, 340, 250, 20);
			textNavePortaAviones.setVisible(true);
			textNavePortaAviones.setText("PortaAviones: " + (nave.cantidadComponentesNave()+ "/"+ nave.obtenerNumeroDeComponentes()));
		}
	}
	private void boxNaves() {

		textNaves.setFont(new Font("", Font.BOLD, 20));
		textNaves.setBounds(590, 240, 250, 20);
		textNaves.setVisible(true);
	}
	 
	 public JLabel textNaves (){
		 return this.textNaves;
	 }
	 
	 public JLabel textNaveLancha1 (){
		 return this.textNaveLancha1;
	 }
	 
	 public JLabel textNaveLancha2 (){
		 return this.textNaveLancha2;
	 }
	 
	 public JLabel textNaveBuque (){
		 return this.textNaveBuque;
	 }
	 
	 public JLabel textNaveDestructor1 (){
		 return this.textNaveDestructor1;
	 }

	 public JLabel textNaveDestructor2 (){
		 return this.textNaveDestructor2;
	 }
	 
	 public JLabel textNaveRompehielos (){
		 return this.textNaveRompehielos;
	 }
	 
	 public JLabel textNavePortaAvion (){
		 return this.textNavePortaAviones;
	 }
}